#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "asa.h"
#include "tabelaSimbolos.h"
#include "gerenErros.h"

int validaSizeType(char* size);

class VisitorAnalisadorSemantico : public Visitor{
	public:
		int visit(Id* id);
        int visit(Num* num);
        int visit(Literal* literal);
        void visit(Program* program);
        void visit(VarList* varList);
        void visit(NameDecl* nameDecl);
        void visit(FunctionList* functionList);
        void visit(TypeList* typeList);
        int visit(Type* type);
        int visit(PrimitiveType* primitiveType);
        int visit(IdType* idType);
        int visit(StatementList* statementList);
        int visit(Statement* statement);
        int visit(If* _if);
        int visit(While* _while);
        int visit(Switch* _switch);
        int visit(Break* _break);
        int visit(Read* _read);
        int visit(Println* _println);
        int visit(CaseBlock* caseBlock);
        int visit(Return* _return);
        int visit(ExpList* expList);
        int visit(Exp* exp);
        int visit(ExpAninhada* expAninhada);
        int visit(Call* call);
        int visit(Assign* assign);
        int visit(RegisterExp* registerExp);
        int visit(Array* array);
        int visit(Operation* operation);
        int visit(Not* _not);
        int visit(Sign* sign);
        int visit(Boolean* boolean);
};
